package com.LFLWZ.controller;
import com.LFLWZ.beans.Dto.Dto;
import com.LFLWZ.beans.POJO.CloudLogin;
import com.LFLWZ.beans.POJO.Lecturer;
import com.LFLWZ.beans.POJO.LecturerApply;
import com.LFLWZ.beans.POJO.sign;
import com.LFLWZ.beans.Vo.CloudLoginVo;
import com.LFLWZ.beans.Vo.LecturerVo;
import com.LFLWZ.beans.Vo.UpPassword;
import com.LFLWZ.beans.Vo.registerVo;
import com.LFLWZ.service.CloudLoginService;
import com.LFLWZ.utils.*;
import com.alibaba.dubbo.config.annotation.Reference;

import org.springframework.beans.BeanUtils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;


/**
 * (Menu)表控制层
 *
 * @author makejava
 * @since 2020-12-04 14:06:41
 */
@RestController
@RequestMapping("user")
public class loginController {
    /**
     * 服务对象   用户登录
     */
    @Reference
    private CloudLoginService cloudLoginService;
    @Autowired
    private RedisUtil redisUtil;
    @PostMapping("login")
    public Dto login(@RequestBody CloudLogin cloudLogin){
//        CloudLogin cloudLogin=new CloudLogin();
        Dto dto=null;
        CloudLoginVo cloudLoginVo=new CloudLoginVo();
//        cloudLogin.setUsername(username);
//        cloudLogin.setPassword(password);
        if (cloudLogin==null){
            dto=DtoUtil.returnError(4001,"参数错误");
        }else {
            cloudLogin.setQq(cloudLogin.getUsername());
            cloudLogin.setPhone(cloudLogin.getUsername());
            if (cloudLogin.getUsername().length()<9){
                cloudLogin.setUid(Integer.valueOf(cloudLogin.getUsername()));
            }
            if (EmptyUtils.isNotEmpty(cloudLogin)){
                if (EmptyUtils.isEmpty(cloudLoginService.sel(cloudLogin))){
                    dto= DtoUtil.returnError(404,"用户不存在");
                }else {
                    String token= MD5.getMd5(cloudLogin.getPassword(),16);
                    cloudLoginVo.setToken(token);
                    cloudLoginVo.setCloudLogin(cloudLoginService.sel(cloudLogin));
                    dto= DtoUtil.returnSuccessData(cloudLoginVo);
                }
            }else {
                dto= DtoUtil.returnError(200,"账号或密码输入有误");
            }
        }
        return dto;
    }

    /**
     * 修改密码
     * @param upPassword
     * @return
     */
    @PostMapping("passwordUp")
    public Dto passwordUp(@RequestBody UpPassword upPassword){
        Dto dto=null;
        try {
            if (EmptyUtils.isEmpty(upPassword.getUid())){
                dto=DtoUtil.returnError(4001,"用户id不能为空");
            }
            if (EmptyUtils.isEmpty(upPassword.getNewpassword())){
                dto=DtoUtil.returnError(4001,"新密码不能为空");
            }
            if ((upPassword.getConfirmpassword()!=upPassword.getNewpassword())){
                dto=DtoUtil.returnError(4002,"两次密码不一致");
            }

            CloudLogin cloudLogin=new CloudLogin();

            cloudLogin.setUid(upPassword.getUid());
            List<CloudLogin> cloudLogins=cloudLoginService.queryAll(cloudLogin);
            if (EmptyUtils.isEmpty(cloudLogins)){
                dto=DtoUtil.returnError(4003,"传输的uid有误");
            }
            if(cloudLogins.get(0).getPassword()!=upPassword.getOldpassword()){
                dto=DtoUtil.returnError(4004,"用户旧密码输出有误");
            }
            cloudLogin.setPassword(upPassword.getNewpassword());
            int line=cloudLoginService.update(cloudLogin);
            if (line>0){
                dto=DtoUtil.returnSuccessData(line);
            }else {
                dto=DtoUtil.returnError(4005,"修改失败");
            }
        }catch (Exception e){
            dto=DtoUtil.returnError(4006,"系统异常");
            e.printStackTrace();
        }
        return dto;
    }

    /**
     * 修改用户资料
     * @param cloudLogin
     * @return
     */
    @PostMapping("userUp")
    public Dto userUp(@RequestBody CloudLogin cloudLogin){
        Dto dto=null;
        try {
            if (EmptyUtils.isEmpty(cloudLogin)){
                dto=DtoUtil.returnError(4001,"不合格的参数");
            }
            int line=cloudLoginService.update(cloudLogin);
            if (line>0){
                CloudLogin cloudLogin1=new CloudLogin();
                cloudLogin1.setId(cloudLogin.getId());
                List<CloudLogin> users=cloudLoginService.queryAll(cloudLogin1);
                System.out.println(users.get(0).getId());
                if (EmptyUtils.isNotEmpty(users)){
                    dto=DtoUtil.returnSuccessData(users.get(0));
                }else {
                    dto=DtoUtil.returnError(4002,"获取数据失败，请重试");
                }
            }else{
                dto=DtoUtil.returnError(4003,"修改资料失败");
            }
        }catch (Exception e){
            dto=DtoUtil.returnError(4005,"系统异常");
            e.printStackTrace();
        }
        return dto;
    }
    @PostMapping("aa")
    public Dto yam(){
        registerVo registerVo=new registerVo();
        int random=(int)((Math.random())*1000000);
        String[] datas = {String.valueOf(random),"2"};
        System.out.println(datas[0]);
        try {
            SendMsgUtil.send("18735993656","1",datas);
        }catch (Exception e){
            return DtoUtil.returnError(200,"异常");

        }
        registerVo.setYzm(random);
                return DtoUtil.returnSuccessData(registerVo);
    }
    @PostMapping("ins")
    public Dto ins(@RequestBody registerVo registerVo){
        CloudLogin cloudLogin=new CloudLogin();
        String a=registerVo.getpAe();
        if(a.contains("@")){
            cloudLogin.setEmail(a);
        }else {
            cloudLogin.setPhone(a);
        }
        int random=(int)((Math.random())*1000000);
        System.out.println(random);
        cloudLogin.setUid(random);
        cloudLogin.setPassword(registerVo.getPassword());
        cloudLogin.setNickname(registerVo.getNickname());
        cloudLogin.setUsername(registerVo.getUsername());
        return DtoUtil.returnSuccessData(cloudLoginService.ins(cloudLogin));
    }
    @GetMapping("sel")
    public Dto sel(CloudLogin cloudLogin){
      return DtoUtil.returnSuccessData(cloudLoginService.queryAll(cloudLogin));
    }

    /**
     * 云通讯短信验证
     * @param cloudLogin 手机号
     * @return
     */
    @PostMapping("phone")
    public Dto phone(@RequestBody CloudLogin cloudLogin){
        Dto dto=null;
        Boolean bool=null;
        String templateId="1";//使用得短信模板
        Long time=5L;//存入redis得过期时间
        String key="key";
        CloudLogin param= cloudLoginService.selByPhone(cloudLogin);
        if (param==null){
            if (cloudLogin.getPhone()==null||cloudLogin.getPhone().equals("")){
                dto=DtoUtil.returnError(4001,"手机号不正确");
            }
            if (redisUtil.lock(key+cloudLogin.getPhone(),30L)){
                int random=(int)((Math.random())*1000000);
                String value=String.valueOf(random);
                redisUtil.setStr(cloudLogin.getPhone(),value,time);
                String[] datas = {String.valueOf(random),"5"};
                bool=SendMsgUtil.send(cloudLogin.getPhone(),templateId,datas);
                dto=DtoUtil.returnSuccessData(bool);
            }
            redisUtil.del(key+cloudLogin.getPhone());
        }else {
            dto=DtoUtil.returnError(4003,"手机号已经注册,请登录");
        }
        return dto;
    }

    @PostMapping("register")
    public Dto register(@RequestBody CloudLogin cloudLogin){
        Dto dto=null;
        CloudLogin cloudLogin1=new CloudLogin();
        if (cloudLogin==null){
            dto=DtoUtil.returnError(4001,"参数错误");
        }
        cloudLogin.setPhone(cloudLogin.getUsername());
        System.out.println(cloudLogin.getPhone());
        String y=redisUtil.getStr(cloudLogin.getPhone());
        System.out.println(y);
        System.out.println(cloudLogin.getPhone());
        if (cloudLogin.getVerifycode().equals(y)){
            int random=(int)((Math.random())*1000000);
            cloudLogin.setUid(random);
            cloudLogin1= cloudLoginService.ins(cloudLogin);
        }
        if (cloudLogin1!=null){
            dto=DtoUtil.returnSuccessData(cloudLogin1);
        }else {
            dto=DtoUtil.returnError(4002,"注册失败");
        }
        return dto;
    }
    //查询签到时间
    @GetMapping("getTime")
    public Dto getTime(int uId){
        if (EmptyUtils.isEmpty(cloudLoginService.seltime(uId))){
            cloudLoginService.upjf(uId);//添加积分
            if (EmptyUtils.isEmpty(cloudLoginService.selsign(uId))){//没记录添加记录
                System.out.println(111111);
                cloudLoginService.insign(uId);
            }else {//有记录更改曾经的签到时间
                System.out.println(2222222);
                cloudLoginService.upsign(uId);
            }
            return DtoUtil.returnSuccessData(1);//返回是否签到成功
        }else {
            return DtoUtil.returnSuccessData(2);//签到过
        }
        }
        }